package com.wcs.exam.dao;

import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.extension.service.IService;
import com.wcs.exam.dao.po.TagTypeCountPO;
import com.wcs.exam.dao.impl.mapper.entity.TagRecord;

import java.util.Collection;
import java.util.List;

/**
 * 标签使用记录 持久化接口
 *
 * @author wcs
 * @since 2025-03-17
 */
public interface TagRecordDao extends IService<TagRecord> {

    /**
     * 根据条件分组统计
     *
     * @param wrapper   统计条件
     * @param classType 返回类型
     * @param <R>       统计结果类型
     * @return 统计结果
     */
    <R> List<R> selectObjs(Wrapper<TagRecord> wrapper, Class<R> classType);

    /**
     * 根据标签ID集合统计标签使用记录
     *
     * @param tagIds 标签ID集合
     * @return 标签使用记录统计
     */
    List<TagTypeCountPO> countByTagIds(Collection<Long> tagIds);

    /**
     * 根据标签类型和资源ID获取标签使用记录
     *
     * @param tagType    标签类型
     * @param resourceId 资源ID
     * @return 标签使用记录
     */
    List<TagRecord> listByTagTypeAndResourceId(Integer tagType, Long resourceId);

    /**
     * 根据标签类型和资源ID获取标签使用记录
     *
     * @param tagType    标签类型
     * @param resourceIds 资源ID
     * @return 标签使用记录
     */
    List<TagRecord> listByTagTypeAndResourceIds(Integer tagType, List<Long> resourceIds);

    /**
     * 根据标签类型和资源ID删除标签使用记录
     *
     * @param tagType    标签记录类型
     * @param resourceId 资源ID
     * @return 影响记录数
     */
    boolean deleteByTagTypeAndResourceId(Integer tagType, Long resourceId);

    /**
     * 根据标签ID删除标签使用记录
     *
     * @param tagId 标签ID
     * @return 删除结果
     */
    boolean deleteByTagId(Long tagId);

}
